package com.designPattern.p04AbstractFactory;

/**
 *  抽象工厂
 * @author: luhd
 * @create: 2021-09-04
 */
// 提供一个创建一系列相关或相互依赖对象的接口，而无需指定它们具体的类。
public class AbstractFactory {
    /**
     * 工厂方法模式引入工厂等级结构，解决了简单工厂模式中工厂类职责过重的问题，
     * 但由于工厂方法模式中每个工厂只创建一类具体类的对象，这将会导致系统当中的工厂类过多，这势必会增加系统的开销。
     * 此时，我们可以考虑将一些相关的具体类组成一个“具体类族”，由同一个工厂来统一生产，这就是我们本文要说的“抽象工厂模式”的基本思想。
     */

    /**
     * 1、最大的好处便是易于交换产品系列，由于具体工厂类，在一个应用中只需要在初始化的时候出现一次，
     * 这就使得改变一个应用的具体工厂变得非常容易，它只需要改变具体工厂即可使用不同产品配置。
     * 2、它让具体的创建实例过程与客户端分离，客户端是通过它们的抽象接口操作实例，产品的具体类名也被具体工厂的实现分离，不会出现在客户代码中。
     */

    /*
        如果项目使用的是MySQL数据，现在如果需要更换为Oracle数据，为了灵活更换数据库，如何设计程序呢？
        接下来通过抽象工厂模式模仿数据访问程序。
        抽象工厂模式实现：
        构建两张数据库表的对应类，只声明，不做任何操作。
     */
}
